图层控制管理
最后更新时间:2019年7月5日
地图是由多个图层按照上下顺序叠加到一起组成的,每个图层都展示一部分的地理信息。例如,用户看到的居民区、绿地区域、水域、道路、兴趣点等等,都可以由单独的图层来展现。图层控制管理包括对地图中图层进行可见性、状态的控制,以及图层的叠加、移动、移除等操作管理。
在实际应用中,我们经常需要隐藏某些叠加在上层的图层,从而来观察下面图层的情况,这时候就需要利用到图层的显示控制,这是一个非常常用且容易实现的功能。图层显示控制功能的核心代码如下所示:
//获取地图、图层 MGSMap *map=mMapView.map; MGSMapLayer *mapLayer=[map getLayerAtIndex:0]; //控制图层可见性 if (mapLayer.visible){ mapLayer.visible = NO; //设置图层隐藏 } else { mapLayer.visible = YES; //设置图层可见 }
也可利用state属性来设置图层状态来控制是否可见、是否可编辑。
在地图显示之后,可以根据需要对地图中的图层进行管理。例如在已有地图中叠加新的图层、移动图层、移除图层。
在移动端加载地图数据,与桌面端类似,当前地图容器(MGSMapView)中只能加载一个地图文档(mapx),并且只能激活打开一个地图(MGSMap)。但在实际应用中,可能需要将不同来源的地图数据同时显示,那么就需要使用到地图叠加的功能,本地矢量数据、本地瓦片数据、在线服务地图数据都可以作为图层(MGSMapLayer)进行叠加。
重要说明:要确保叠加的图层和原有地图的空间参考系一致,这样叠加的效果才能显示正确。
//地图文档路径 NSString *mapPath=[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)lastObject] stringByAppendingPathComponent:@"/MapGIS Mobile 2D Sample/Map/MapShow/WuHan/WuHan.mapx"]; //初始加载离线矢量地图作为底图(Web墨卡托投影坐标系) [_mapView loadFromFile:path]; //叠加地图:在底图加载完成后再叠加地图 //创建地图服务对象(类型为谷歌影像,同为Web墨卡托投影坐标系) MGSMapServer* mapServer = [MGSServerLayer createMapServerByType:MAPSERVER_TYPE_GOOGLE_SATELLITEMAP]; //创建服务图层 MGSServerLayer *serverLayer=[[MGSServerLayer alloc] init]; [serverLayer setMapServer:mapServer]; //设置地图服务即数据源 [serverLayer setName:@"Google服务图层"]; //设置图层名称 //叠加图层,添加到顶层 [self.mapView.map append:serverLayer]; //强制刷新 [self.mapView forceRefresh];
实现图层叠加的效果可采用多种方法实现:
接口 | 功能 |
---|---|
append: | 添加图层 |
insert:atIndex: | 插入图层 |
dragIn:andIndex: | 拽入图层 |
其中append方法是将图层叠加到地图顶层,显示在最上层;insert和dragIn方法可以将图层插入到地图中的任何位置。
利用图层移动接口方法可以调整图层的压覆顺序,达到图层叠加展示效果的调整。
说明:根据地图组织的规则,图层索引从0开始,索引值越小,越先绘制,显示在越底层;索引值越大,越后绘制,显示在越上层。
//将索引为1的图层移至索引为2的位置 [mapView.map moveFromIndex:1 toIndex:2];
除此方法外,MGSMap类还提供了其他的接口实现图层移动功能。
接口 | 功能 |
---|---|
moveFromIndex:toIndex: | 将指定索引的图层从图层目录的一个索引处移到另一个索引处 |
moveToBottom: | 移动图层到最下面(最后绘制) |
moveToDown: | 下移图层 |
moveToTop: | 移动图层到最上面(最先绘制) |
moveToUp: | 上移图层 |
利用图层移除接口可以将图层从地图中移除。
[mapView.map remove:1]; //根据索引移除图层
达到图层移除的效果可采用多种方法实现:
接口 | 功能 |
---|---|
remove: | 移除指定的图层 |
removeFromIndex:andCount: | 移除指定索引开始后面指定数目的图层 |
removeAtIndex: | 移除指定索引的图层 |
removeAll | 移除所有图层,同时销毁图层 |
dragOut: | 移除图层,不会销毁图层 |
说明:移除图层,不会将真正的图层数据删除,只是在当前显示的地图中移除此图层,也可再叠加上。利用remove系列方法移除图层时,会将其MapLayer对象销毁,如果移除后又需要叠加到map中,则MapLayer需要重新构建。dragOut方法移除时不会销毁图层。